# Manejo de todo lo referente al elemental tree...
import xml.etree.ElementTree as e

def Crear(p): #Inicia el Arbol
    p.head_padre=[]
    p.for_id=[]
    p.rango_general = None
    p.root = e.Element("main")
    p.root.set("name",p.program)
    p.head = p.root
    print("____________________________________")
    print("ElementTree Iniciado")
    print("____________________________________")

def Imprimir(p): #Cierra el Arbol y crea el archivo pertinente
    p.tree = e.ElementTree(p.root)
    p.tree.write("Resultados\Codigo_intermedio.xhtml")
    print("____________________________________")
    print("Codigo_intermedio.xhtml Creado con exito!")
    print("____________________________________")

def Encontrar_Cabezal(p,cabecera):
    if p.parser.actual.nombre == "main": p.head = p.root #Si buscamos una cabezera en el main
    else: p.head = Encontrar_Cabezal_Subprogram(p) #Si laburamos dentro de una funcion...
    if p.head.find(cabecera) == None: p.head = e.SubElement(p.head,cabecera)
    else: p.head = p.head.find(cabecera)

def Encontrar_Cabezal_Subprogram(p):
    p.head = p.root.find("subprogram") #Nuestra raiz de busqueda pasa a ser esa seccion del arbol
    for heads in p.head.findall(p.parser.actual.tipo_token): #recorremos todos los subprogramas que respondan a ese tipo de token
        if heads.attrib["name"] == p.parser.actual.nombre: return(heads) #Conseguimos el Head especifico de nuestra funcion

def Crear_Cuerpo(head,tag,lista_sets):
    body = e.SubElement(head,tag)
    for sets in lista_sets:
        body.set(sets[0],sets[1])

def Crear_Cuerpo_Libre(tag,lista_sets):
    body = e.Element(tag)
    for sets in lista_sets:
        body.set(sets[0],sets[1])
    return(body)
